﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.IO.Ports;
using System.Windows.Forms;

namespace ProyectA
{
    public class cOrdenCompraServicio
    {
        ProjectA.wsGeneral.WsGeneral wsGeneral;
        public enum Modo
        {
            Adiciona,
            Modificar
        }

        #region Propiedades

        public Modo ModoActaul { get; set; }

        public cOrdenCompraServicio()
        {
            ModoActaul = Modo.Modificar;
            wsGeneral = new ProjectA.wsGeneral.WsGeneral();
            ElementosOrden = new DataTable();
            ElementosOrden.TableName = "Table1";
            ElementosOrden.Columns.Add("ID");
            ElementosOrden.Columns.Add("ItemsID");
            ElementosOrden.Columns.Add("Cantidad");
            ElementosOrden.Columns.Add("PrecioUD");
            ElementosOrden.Columns.Add("PrecioTotal");
        }


        public int NumeroOrden { get; set; }
        public int ProveedorID { get; set; }
        public string Descripcion { get; set; }
        public bool EsServicio { get; set; }
        public DateTime FechaEntrega { get; set; }
        public float Valor { get; set; }
        public int NoEntegas { get; set; }

        private DataTable _ElementosOrden;

        public DataTable ElementosOrden
        {
            get { return _ElementosOrden; }
            set { _ElementosOrden = value; }
        }
        

        private int _RegistroID;

        public int RegistroID
        {
            get { return _RegistroID; }
            set { _RegistroID = value; }
        }

        private int[] _RegistrosElementos;

        public int[] RegistrosIdElementos
        {
            get { return _RegistrosElementos; }
            set { _RegistrosElementos = value; }
        }

        public int ElementoId { get; set; }

       

        #endregion


        public void Guardar()
        {
            string sErr="";
            try
            {
                if (ModoActaul == Modo.Adiciona)
                {
                    ElementosOrden.Columns.Remove("ID");
                    RegistrosIdElementos = new int[ElementosOrden.Rows.Count];
                    if (wsGeneral.AddPoSo(NumeroOrden, ProveedorID, Descripcion, EsServicio, FechaEntrega, Valor, NoEntegas, ElementosOrden,
                        out _RegistrosElementos, out _RegistroID, out sErr))
                    {

                        for (int iFilas = 0; iFilas <= ElementosOrden.Rows.Count; iFilas++)
                        {
                            ElementosOrden.Rows[iFilas]["ID"] = RegistrosIdElementos[iFilas];
                        }

                        MessageBox.Show("Orden Añadida existosamente!");
                    }
                }

                else
                {
                    bool bResp = false;

                    bResp = wsGeneral.ModifyPoSo(RegistroID, NumeroOrden, ProveedorID, Descripcion, EsServicio, FechaEntrega, Valor, NoEntegas, out sErr);
                    if (bResp)
                    {
                        for (int iFilas = 0; iFilas < ElementosOrden.Rows.Count; iFilas++)
                        {
                            int iRegistro;
                            if (int.Parse(ElementosOrden.Rows[iFilas]["ID"].ToString()) == 0)
                            {
                                if(!wsGeneral.AddItemsPorOrden(RegistroID, int.Parse(ElementosOrden.Rows[iFilas]["ItemsID"].ToString()),
                                    int.Parse(ElementosOrden.Rows[iFilas]["Cantidad"].ToString()),
                                    int.Parse(ElementosOrden.Rows[iFilas]["PrecioUD"].ToString()),
                                    int.Parse(ElementosOrden.Rows[iFilas]["PrecioTotal"].ToString()), out  iRegistro, out sErr))
                                {
                                    bResp = false;
                                }
                            }
                            else
                            {
                                if (!wsGeneral.ModifyItemsPorOrden(int.Parse(ElementosOrden.Rows[iFilas]["ID"].ToString()), RegistroID,
                                    int.Parse(ElementosOrden.Rows[iFilas]["ItemsID"].ToString()),
                                    int.Parse(ElementosOrden.Rows[iFilas]["Cantidad"].ToString()),
                                    int.Parse(ElementosOrden.Rows[iFilas]["PrecioUD"].ToString()),
                                    int.Parse(ElementosOrden.Rows[iFilas]["PrecioTotal"].ToString()), out sErr))
                                {

                                    bResp = false;
                                }
                            }
                        }
                    }

                    if (bResp)
                    {
                        MessageBox.Show("Modificación exitosa!");
                    }
                }
            }
            catch (Exception Exc)
            {
                
            }
        }

        public bool Eliminar()
        {
            bool bResp = true;
            string sErr = "";

            for(int iFila=0; iFila< ElementosOrden.Rows.Count; iFila++)
            {
                bResp = wsGeneral.DeleteItemsPorOrden(int.Parse(ElementosOrden.Rows[iFila]["ID"].ToString()), out sErr);
            }

            bResp = wsGeneral.DeletePoSo(RegistroID, out sErr);

            if(bResp)
            {
                MessageBox.Show("Eliminación existosa!");
                return true;
            }
            else
                return false;
        }




    }
}
